#include <head.h>

int main(int argc, char const *argv[])
{
    int p_fd[2];// 创建管道，0为读 1为写
    if (-1 == pipe(p_fd))
    {
        perror("pipe error:");
        return -1;
    }

    pid_t pid = 0;//创建进程号

    if (-1 == (pid = fork()))//判断进程是否创建
    {
        perror("fork error:");
        close(p_fd[0]); // 关闭 读端
        close(p_fd[1]); // 关闭 写端
        return -1;
    }
    else if (0 < pid) // 父进程 向通道内写入数据
    {
        close(p_fd[0]);// 关闭 读端
        printf("写端");
        char buf_write[128];
        while (1)
        {
            // 写入数据
            printf("父进程 请输入你需要传输的数据:\n");
            scanf("%s", buf_write);
            if (!strcmp(buf_write, "quit"))
            {
                write(p_fd[1], buf_write, strlen(buf_write));
                printf("父进程 退出\n");
                break;
            }

            write(p_fd[1], buf_write, strlen(buf_write));
            usleep(50000);
        }
        close(p_fd[1]);// 关闭写端
    }
    else if (0 == pid) // 子进程 向通道内读取数据
    {
        close(p_fd[1]);// 关闭 写端
        printf("写端");
        char buf_read[128];
        while (1)
        {
            // 读取数据
            memset(buf_read, 0, sizeof(buf_read));
            read(p_fd[0], buf_read, sizeof(buf_read));
            if (strlen(buf_read) == 0)
            {
                continue;
            }
            
            if (!strcmp(buf_read, "quit"))
            {
                printf("子进程 退出\n");
                break;
            }
            printf("子进程 读取的数据是: %s\n", buf_read);
        }
        // 关闭读端
        close(p_fd[0]);
    }
    return 0;
}
